home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Browsers, Managers & Extensions / Mozilla Geode 1.5 / geode-latest.xpi / content / geoprefs.xul < prev    next >
Extensible Markup Language  |  2008-10-02  |  6KB  |  177 lines

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
  3. <window id="geoprefs" title="Geolocation Saved Preferences"
  4.         onload="init();"
  5.         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  6. <script type="application/x-javascript">
  7. <!--
  8.  * ***** BEGIN LICENSE BLOCK *****
  9.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  10.  *
  11.  * The contents of this file are subject to the Mozilla Public License Version
  12.  * 1.1 (the "License"); you may not use this file except in compliance with
  13.  * the License. You may obtain a copy of the License at
  14.  * http://www.mozilla.org/MPL/
  15.  *
  16.  * Software distributed under the License is distributed on an "AS IS" basis,
  17.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  18.  * for the specific language governing rights and limitations under the
  19.  * License.
  20.  *
  21.  * The Original Code is labs.mozilla.com code.
  22.  *
  23.  * The Initial Developer of the Original Code is Mozilla Corporation.
  24.  * Portions created by the Initial Developer are Copyright (C) 2008
  25.  * the Initial Developer. All Rights Reserved.
  26.  *
  27.  * Contributor(s):
  28.  *  Justin Dolske <dolske@mozilla.com> (original author)
  29.  *
  30.  * Alternatively, the contents of this file may be used under the terms of
  31.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  32.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  33.  * in which case the provisions of the GPL or the LGPL are applicable instead
  34.  * of those above. If you wish to allow use of your version of this file only
  35.  * under the terms of either the GPL or the LGPL, and not to allow others to
  36.  * use your version of this file under the terms of the MPL, indicate your
  37.  * decision by deleting the provisions above and replace them with the notice
  38.  * and other provisions required by the GPL or the LGPL. If you do not delete
  39.  * the provisions above, a recipient may use your version of this file under
  40.  * the terms of any one of the MPL, the GPL or the LGPL.
  41.  *
  42.  * ***** END LICENSE BLOCK *****
  43. -->
  44. <![CDATA[
  45. const Cc = Components.classes;
  46. const Ci = Components.interfaces;
  47.  
  48. var sitedata;
  49. var listdata;
  50. var deleteButton;
  51. var cps = Cc["@mozilla.org/content-pref/service;1"].
  52.           getService(Ci.nsIContentPrefService);
  53.  
  54. function init() {
  55.     list = document.getElementById("list");
  56.     listdata = document.getElementById("listdata");
  57.     deleteButton = document.getElementById("deleteButton");
  58.     deleteButton.disabled = true;
  59.     
  60.     sitedata = getSiteData();
  61.     for (var i = 0; i < sitedata.length; i++) {
  62.         addToList(sitedata[i].hostname, sitedata[i].fuzzLevel);
  63.     }
  64.  
  65. }
  66.  
  67. function getSiteData() {
  68.     var results = [];
  69.  
  70.     // nsIContentPrefService doesn't have an API to list all saved settings,
  71.     // so we'll have to query its DB directly.
  72.  
  73.     const query = "SELECT groups.name, prefs.value " +
  74.                   "FROM prefs " +
  75.                   "LEFT JOIN groups ON groups.id = prefs.groupID " +
  76.                   "WHERE prefs.settingID = ( " +
  77.                   "  SELECT id " +
  78.                   "  FROM settings " +
  79.                   "  WHERE name = 'labs.geode.fuzzLevel' " +
  80.                   ")";
  81.  
  82.     var stmt = cps.DBConnection.createStatement(query);
  83.  
  84.     var wrappedStmt = Cc["@mozilla.org/storage/statement-wrapper;1"].
  85.                       createInstance(Ci.mozIStorageStatementWrapper);
  86.     wrappedStmt.initialize(stmt);
  87.  
  88.  
  89.     while (wrappedStmt.step()) {
  90.         var result = { hostname  : wrappedStmt.row.name,
  91.                        fuzzLevel : wrappedStmt.row.value };
  92.         results.push(result);
  93.     }
  94.  
  95.     return results;
  96. }
  97.  
  98. function addToList(hostname, fuzzLevel) {
  99.     var treeItem = document.createElement("treeitem");
  100.     var treeRow = document.createElement("treerow");
  101.     var col1 = document.createElement("treecell");
  102.     var col2 = document.createElement("treecell");
  103.     var col3 = document.createElement("treecell");
  104.  
  105.     col1.setAttribute("label", hostname);
  106.     col2.setAttribute("label", fuzzLevel >= 0 ? "Allowed" : "Denied");
  107.     if (fuzzLevel == -1)
  108.         col3.setAttribute("label", "");
  109.     else if (fuzzLevel == 0)
  110.         col3.setAttribute("label", "Exact Location");
  111.     else if (fuzzLevel == 200)
  112.         col3.setAttribute("label", "Neighborhood");
  113.     else if (fuzzLevel == 10000)
  114.         col3.setAttribute("label", "City");
  115.     else
  116.         col3.setAttribute("label", fuzzLevel + " meters");
  117.  
  118.     treeRow.appendChild(col1);
  119.     treeRow.appendChild(col2);
  120.     treeRow.appendChild(col3);
  121.     treeItem.appendChild(treeRow);
  122.  
  123.     // Insert into the list
  124.     listdata.appendChild(treeItem);
  125. }
  126.  
  127. function onSelect() {
  128.     var isSelected = (list.view.selection.getRangeCount() > 0);
  129.     deleteButton.disabled = !isSelected;
  130. }
  131.  
  132. function deleteSelection() {
  133.     var index = list.currentIndex;
  134.     var item = sitedata[index];
  135.  
  136.     // Remove it from the real storage
  137.     // Ugh, we need a real URI to do this, but it's not saved in the DB. Just
  138.     // prepend "http://" to fudge it.
  139.     var ioService = Cc["@mozilla.org/network/io-service;1"].
  140.                     getService(Ci.nsIIOService);
  141.     var uri = ioService.newURI("http://" + item.hostname, null, null);
  142.  
  143.     cps.removePref(uri, "labs.geode.fuzzLevel");
  144.  
  145.     // Remove it from our data array
  146.     sitedata.splice(index, 1);
  147.  
  148.     // Remove it from the UI
  149.     listdata.removeChild(listdata.childNodes[index]);
  150.  
  151.     list.view.selection.clearSelection();
  152. }
  153. ]]>
  154. </script>
  155.  
  156. <label value="These sites are automatically allowed (or prohibited) from accessing your position:"/>
  157. <tree id="list"
  158.       seltype="single" rows="5"
  159.       onselect="onSelect();">
  160.     <treecols>
  161.         <treecol label="Site" flex="5"/>
  162.         <splitter class="tree-splitter"/>
  163.         <treecol label="Permission" flex="1"/>
  164.         <splitter class="tree-splitter"/>
  165.         <treecol label="Fuzzing" flex="1"/>
  166.     </treecols>
  167.  
  168.     <treechildren id="listdata">
  169.     </treechildren>
  170. </tree>
  171.  
  172. <hbox>
  173.     <spacer flex="1"/>
  174.     <button id="deleteButton" label="Delete" oncommand="deleteSelection();"/>
  175. </hbox>
  176. </window>
  177.